0415. 字符串相加【简单】
1. 📝 题目描述
给定两个字符串形式的非负整数 num1 和num2,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
txt
输入:num1 = "11", num2 = "123"
输出:"134"1
2
2
示例 2:
txt
输入:num1 = "456", num2 = "77"
输出:"533"1
2
2
示例 3:
txt
输入:num1 = "0", num2 = "0"
输出:"0"1
2
2
提示:
1 <= num1.length, num2.length <= 10^4num1和num2都只包含数字0-9num1和num2都不包含任何前导零
2. 🎯 s.1 - 模拟十进制逐位相加
js
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function (num1, num2) {
let i = num1.length - 1
let j = num2.length - 1
let carry = 0
let result = ''
// 从末尾开始逐位相加
while (i >= 0 || j >= 0 || carry > 0) {
let digit1 = i >= 0 ? parseInt(num1[i]) : 0
let digit2 = j >= 0 ? parseInt(num2[j]) : 0
let sum = digit1 + digit2 + carry
carry = Math.floor(sum / 10)
result = (sum % 10) + result
i--
j--
}
return result
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- 时间复杂度:
,其中 m 和 n 分别是两个字符串的长度,需要遍历较长字符串的每一位 - 空间复杂度:
,用于存储结果字符串 - 算法思路:
- 利用两个指针 i、j,分别指向 nums 和 num2 的末尾位置,从最低位开始逐位相加,用 carry 来记录进位,用 result 来记录最终结果。
- 模拟手工加法的过程:
- 从两个字符串的末尾开始逐位相加
- 处理进位情况
- 将每一位的计算结果添加到结果字符串中
- 注意处理两个字符串长度不同的情况